package acm;

import java.util.Scanner;

//阶乘，用来表示比较大的数的阶乘，比如20！
//思路就是用一个数组来表示每一位,a[0]存储个位，a[1]存储十位，a[2]存储百位...
public class Factorial {

	public static final int maxBit=1000;   //最大位数为1000位，差不多500的阶乘吧，瞎猜的
	public static void main(String[] args) {
		int i,j,n;  //n表示阶乘
		Scanner scanner=new Scanner(System.in);
		n=scanner.nextInt();
		System.out.println(n);
		int[] factorialArray=new int[maxBit];   //用来存储阶乘的每一位的数组
		factorialArray[0]=1;
		for (i= 2; i <=n; i++) {
			int c=0;   //表示进位
			for (j = 0;  j< factorialArray.length; j++) {
				int product=factorialArray[j]*i+c;
				factorialArray[j]=product%10;
				c=product/10;
				/*//c若等于0，就表示下面的都为0了，结束本次循环
				//并不表示后面的都为0，比如没有进位的情况
				if(c==0){
					break;
				}*/
			}
		}
		//由于前面有很多0，找到第一个不为0的下标
		for(j = maxBit-1; j >= 0; j--){
			if(factorialArray[j] != 0){
				break;
			}
		}
		//输出
		for (i = j;i>=0; i--) {
			System.out.print(factorialArray[i]);
		}
		scanner.close();
	}
}
